.TH std::terminate 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::terminate \- std::terminate

.SH Synopsis
   Defined in header <exception>
   void terminate();                        \fI(until C++11)\fP
   [[noreturn]] void terminate() noexcept;  \fI(since C++11)\fP

   std::terminate() is called by the C++ runtime when the program cannot continue for
   any of the following reasons:

   1) An exception is thrown and not caught (it is implementation-defined whether any
   stack unwinding is done in this case).
   2) A function directly invoked by the exception handling mechanism while handling an
   exception that has not yet been caught exits via an exception (e.g. a destructor of
   some local object, or a copy constructor constructing a catch-clause parameter).
   3) The constructor or the destructor of a static
   or thread-local
   \fI(since C++11)\fP object throws an exception.
   4) A function registered with std::atexit
   or std::at_quick_exit
   \fI(since C++11)\fP throws an exception.

   5) A dynamic exception specification is violated and the default
   handler for std::unexpected is executed.
   6) A non-default handler for std::unexpected throws an exception that  \fI(until C++17)\fP
   violates the previously violated dynamic exception specification, if
   the specification does not include std::bad_exception.

   7) A noexcept specification is violated (it is implementation-defined
   whether any stack unwinding is done in this case).
   8) std::nested_exception::rethrow_nested is called for an object that
   isn't holding a captured exception.
   9) An exception is thrown from the initial function of std::thread.    \fI(since C++11)\fP
   10) A joinable std::thread is destroyed or assigned to.
   11) std::condition_variable::wait,
   std::condition_variable::wait_until, or
   std::condition_variable::wait_for fails to reach its postcondition
   (e.g. if relocking the mutex throws).

   12) A function invoked by a parallel algorithm exits via an uncaught   \fI(since C++17)\fP
   exception and the execution policy specifies termination.

   std::terminate() may also be called directly from the program.

   When std::terminate is called due to a thrown exception, an implicit try/catch
   handler is considered active. Thus, calling std::current_exception will return the
   thrown exception.

   In any case, std::terminate calls the currently installed std::terminate_handler.
   The default std::terminate_handler calls std::abort.

   If a destructor reset the terminate handler during stack unwinding and
   the unwinding later led to terminate being called, the handler that
   was installed at the end of the throw expression is the one that will  \fI(until C++11)\fP
   be called. (note: it was ambiguous whether re-throwing applied the new
   handlers)
   If a destructor reset the terminate handler during stack unwinding, it
   is unspecified which handler is called if the unwinding later led to   \fI(since C++11)\fP
   terminate being called.

.SH Notes

   If the handler mechanism is not wanted, e.g. because it requires atomic operations
   which may bloat binary size, a direct call to std::abort is preferred when
   terminating the program abnormally.

   Some compiler intrinsics, e.g. __builtin_trap (gcc, clang, and icc) or __debugbreak
   (msvc), can be used to terminate the program as fast as possible.

   Defect reports

   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.

      DR    Applied to              Behavior as published              Correct behavior
                       effect of calling std::set_terminate during
   LWG 2111 C++11      stack                                           made unspecified
                       unwinding differs from C++98 and breaks some
                       ABIs

.SH See also

   terminate_handler the type of the function called by std::terminate
                     \fI(typedef)\fP
   abort             causes abnormal program termination (without cleaning up)
                     \fI(function)\fP
